Simon Says 是一種簡單但經典的記憶和模仿遊戲,通常適合各個年齡層的玩家。中文地區會叫這遊戲為「老師說」。這個遊戲最初是作為一種口頭遊戲而誕生的,後來被做成電子遊戲設備。
遊戲規則
基本規則:
遊戲目標:
遊戲示範:
1978年,Milton Bradley 公司(現已被孩之寶公司收購)推出了一款名為 "Simon" 的電子記憶遊戲。這款遊戲使用光和聲音序列來測試玩家的記憶力。玩家需要記住並重複顏色和聲音的序列,序列會隨著遊戲進行變得越來越長和複雜。
拉爾夫·貝爾(Ralph Baer),電子遊戲之父也是西蒙的發明者。
Simon 有四個不同顏色的按鈕。每個按鈕都播放著獨特的音符。演奏者必須能夠重複西蒙創造的越來越長的音調串。如果你的訂單弄錯了,你就輸了。貝爾意識到,選擇西蒙的四種音調是一個關鍵的決定。他和莫裡森都認為Touch Me的主要缺點之一是它的聲音令人不快。
import random
import time
# 設定顏色選項
colors = ['R', 'G', 'B', 'Y'] # 紅, 綠, 藍, 黃
# 函數:顯示提示
def display_sequence(sequence):
print("請小心輸入按鍵:")
for color in sequence:
print(color, end=' ')
time.sleep(1)
print("\n" * 50) # 清除螢幕
# 函數:玩家輸入
def get_player_input(length):
player_input = []
print(f"請重複輸入序列 ({length} keys):")
for i in range(length):
while True:
color = input(f"輸入顏色 {i+1} (R, G, B, Y): ").upper()
if color in colors:
player_input.append(color)
break
else:
print("輸入錯誤. 請輸入 R, G, B, 或 Y.")
return player_input
# 主程式
def simon_says():
print("歡迎來玩 Simon Says 遊戲!")
sequence = []
round_num = 1
while True:
print(f"\n第 {round_num} 局")
sequence.append(random.choice(colors))
display_sequence(sequence)
player_input = get_player_input(len(sequence))
if player_input == sequence:
print("正確! 準備進入下一關...")
round_num += 1
time.sleep(2)
else:
print("錯誤! 遊戲結束!")
print(f"正確答案是: {' '.join(sequence)}")
print(f"您得到了 ", 2 ** round_num - 1, "分!")
break
# 遊戲開始
simon_says()
# Simon Game - fun to learn retro-game programming
# Jan 31, 2019, by Peter Gabriel under CC-BY-4.0 license
try:
if snd: snd.deinit()
except: pass
machine.Pin(17,3).value(1)
snd=machine.PWM(machine.Pin(25, 3)); snd.duty(0)
def soundit(f,t):
snd.freq(f);
for i in range(20):snd.duty(20-i); time.sleep(t);
snd.duty(0)
def wait_key():
while wb.getkey()==0: time.sleep(0.01)
key=wb.getkey()
while wb.getkey()>0: time.sleep(0.01)
if key>=16: key/=16
return key
qx=[71,71,111,31]; qy=[90,40,65,65]; qt=[415,311,248,208]
qc=[wb.YELLOW, wb.BLUE, wb.RED, wb.GREEN]
def new_game():
global q, level
q=[]; level=1
for i in range(30): q.append(wb.rand(4))
wb.cls(); wb.colors(0xffff,0); wb.str("Simon Game", 0, 8, 4, 1)
for i in range(4): wb.box(qx[i]-5,qy[i]-5,30,30,qc[i])
def end_game():
for i in range(50): soundit(300-i*4,0.001)
wb.str("Play Again?", 26,100, 5, 1); key=wait_key(); new_game()
def draw_button(i):
wb.box(qx[q[i]],qy[q[i]],20,20,0)
soundit(qt[q[i]],0.005)
wb.box(qx[q[i]],qy[q[i]],20,20,qc[q[i]])
def get_buttons(level):
for i in range(level):
key=wait_key()
if 2**q[i] == key: draw_button(i)
else: return False
time.sleep(0.5)
return True
new_game()
while True:
wb.str("Level %02d"%level, 95, 8, 4, 1)
for i in range(level): draw_button(i); time.sleep(0.1)
if get_buttons(level): level+=1
else: end_game()
遊戲初始畫面:
遊戲結束: